import java.util.Scanner;

public class demo {


    //    求正数数组的最小不可组成和▲▲▲▲
//      给定一个全是正数的数组arr，定义一下arr的最小不可组成和的概念：
//      1，arr的所有非空子集中，把每个子集内的所有元素加起来会出现很多的值，其中最小的记为min，最大的记为max；
//      2，在区间[min,max]上，如果有一些正数不可以被arr某一个子集相加得到，那么这些正数中最小的那个，就是arr的最小不可组成和；
//      3，在区间[min,max]上，如果所有的数都可以被arr的某一个子集相加得到，那么max+1是arr的最小不可组成和；
//    arr = {3,2,5} arr的min为2，max为10，在区间[2,10]上，4是不能被任何一个子集相加得到的值中最小的，所以4是arr的最小不可组成和
    public int getFirstUnFormedNum(int[] arr) {
        int min = Integer.MAX_VALUE;
        int max = 0;//最大子集
        for (int x:arr) {
            min = Math.min(min, x);
            max += x;
        }
//        保存该数是否是子集
        boolean[] result = new boolean[max+1];
        result[0] = true;
        for (int i=0; i<arr.length; i++) {
            for (int j=max; j>=arr[i]; j--) {
//                j是最大子集往前遍历 因为如果j-arr[i] 是一个子集 那么j一定是子集
//                注意如果j本身是子集的话 那么就不要要改变result[j-arr[i]](这个结果可能是false)
                result[j] = result[j-arr[i]] || result[j];
            }
        }
//        从最小值位置开始往后遍历
        for (int i=min; i<result.length; i++) {
            if (!result[i]) {
                return i;
            }
        }
        return max+1;
    }








    //    有假币▲▲▲▲
// 居然有假币！ 现在猪肉涨了，但是农民的工资却不见涨啊，没钱怎么买猪肉啊。nowcoder这就去买猪肉，结果找来的零钱中有假币！！！
// 可惜nowcoder 一不小心把它混进了一堆真币里面去了。只知道假币的重量比真币的质量要轻，给你一个天平（天平两端能容纳无限个硬币），
// 请用最快的时间把那个可恶的假币找出来。
//    思路:
//先枚举一些例子，找出其中规律：
//对于 1个硬币，称量 0次
//对于 2个硬币，称量 1次
//对于 3个硬币，称量 1次
//
//对于 4个硬币，称量 2次，先分成（2，2，0），第一次称量前两份（2，2），如果重量不一样，再次求出判断另外2个硬币需要称量的次数。
//
//对于 5个硬币，称量 2次，先分成（2，2，1），第一次称量前两份（2，2），如果重量不一样，再次判断另外1个硬币需要称量的次数。
//
//对于 6个硬币，称量 2次，先分成（2，2，2），第一次称量前两份（2，2），如果重量不一样，再次判断求出另外2个硬币需要称量的次数。
//
//对于 7个硬币，称量 2次，先分成（3，3，1），第一次称量前两份（3，3），如果重量不一样，再次判断求出另外3个硬币需要称量的次数。
//
//通过上面分析可以看出，对于要称量的硬币，每次称量前分成3份，要求前两份的个数不小于第三份。如果前两份重量是一样，那么假币在第三份中，
//这样就除去了2/3的硬币。如果前两份重量不一样，那么假币在重量轻的一份中，这样也除去了2/3的硬币。
//这样以来，称量一次除去了将近2/3的硬币，一直重复上面的分法，就可以很快求出称量次数
//    通过Math.ceil()方法  类型是double 向上取整;
//    输入多组数据 输入0结束
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextInt()) { // 注意 while 处理多个 case
            int n = in.nextInt();
            if (n == 0) {
                break;
            }
            int count = 0;
            while(n >= 2) {
                n = (int)Math.ceil(n/3.0);
                count++;
            }
            System.out.println(count);
        }
    }
}
